/**
 * 
 */
package metier;

/**
 * @author Quipu-Team
 *
 */
public abstract class UE {

    /*Attributs priv�s*/
    private int id = 0;
    private String nom = "";			/*Nom de l'UE*/
    private Semestre semestre = null;
    private int nombreECTS = 0;			/*Nombre de cr�dits europ�ens de l'UE*/

    private int noteMin = 0;				/*Note minimale requise pour valider l'UE*/

    private String description = "";	/*Description de l'UE*/


    //Constructeurs
    /**
     *
     */
    public UE(String nom, int nombreECTS, int noteMin) {
        this.nom = nom;
        this.nombreECTS = nombreECTS;
        this.noteMin = noteMin;
    }

    public UE(String nom, int nombreECTS, int noteMin, String description, Semestre semestre) {
        this.nom = nom;
        this.nombreECTS = nombreECTS;
        this.noteMin = noteMin;
        this.description = description;
        this.semestre = semestre;
    }

    public UE(){
        
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    /*Accesseurs*/
    /**
     * @return the nom nom de l'UE
     */
    public String getNom() {
        return nom;
    }

    /**
     * @param nom
     *            the nom to set
     */
    public void setNom(String nom) {
        this.nom = nom;
    }

    /**
     * @return the nombreECTS nombre de cr�dits ECTS de l'UE
     */
    public int getNombreECTS() {
        return nombreECTS;
    }

    /**
     * @param nombreECTS
     *            the nombreECTS to set
     */
    public void setNombreECTS(int nombreECTS) {
        this.nombreECTS = nombreECTS;
    }

    /**
     * @return the noteMin note minimale de l'UE
     */
    public int getNoteMin() {
        return noteMin;
    }

    /**
     * @param noteMin
     *            the noteMin to set
     */
    public void setNoteMin(int noteMin) {
        this.noteMin = noteMin;
    }

    /**
     * @return the description description de l'UE
     */
    public String getDescription() {
        return description;
    }

    /**
     * @param description
     *            the description to set
     */
    public void setDescription(String description) {
        this.description = description;
    }

    public Semestre getSemestre() {
        return semestre;
    }

    public void setSemestre(Semestre semestre) {
        this.semestre = semestre;
    }


    // M�thodes abstraites
    /**
     * @throws ExceptionMetier
     * M�thode qui permet d'ins�rer l'objet dans le syst�me de stockage
     */
    public abstract void insert() throws ExceptionMetier;

    /**
     * @throws ExceptionMetier
     * M�thode qui permet de mettre � jour l'objet dans le syst�me de stockage
     */
    public abstract void update() throws ExceptionMetier;

    /**
     * @throws ExceptionMetier
     * M�thode qui permet de supprimer l'objet dans le syst�me de stockage
     */
    public abstract void delete() throws ExceptionMetier;

    /**
     * @throws ExceptionMetier
     * M�thode qui permet de charger un objet � partir du syst�me de stockage
     */
    public abstract void load(int id) throws ExceptionMetier;
}
